home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / pyxmpp / jabber / register.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  162 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __revision__ = '$Id: delay.py 567 2005-03-29 20:08:55Z jajcus $'
  5. __docformat__ = 'restructuredtext en'
  6. import libxml2
  7. import logging
  8. from pyxmpp.utils import to_utf8, from_utf8
  9. from pyxmpp.xmlextra import get_node_ns_uri
  10. from pyxmpp.objects import StanzaPayloadObject
  11. from pyxmpp.xmlextra import xml_element_iter
  12. from pyxmpp.jabber.dataforms import DATAFORM_NS, Form
  13. REGISTER_NS = 'jabber:iq:register'
  14. legacy_fields = {
  15.     'username': ('text-single', u'Account name associated with the user'),
  16.     'nick': ('text-single', u'Familiar name of the user'),
  17.     'password': ('text-private', u'Password or secret for the user'),
  18.     'name': ('text-single', u'Full name of the user'),
  19.     'first': ('text-single', u'First name or given name of the user'),
  20.     'last': ('text-single', u'Last name, surname, or family name of the user'),
  21.     'email': ('text-single', u'Email address of the user'),
  22.     'address': ('text-single', u'Street portion of a physical or mailing address'),
  23.     'city': ('text-single', u'Locality portion of a physical or mailing address'),
  24.     'state': ('text-single', u'Region portion of a physical or mailing address'),
  25.     'zip': ('text-single', u'Postal code portion of a physical or mailing address'),
  26.     'phone': ('text-single', u'Telephone number of the user'),
  27.     'url': ('text-single', u'URL to web page describing the user'),
  28.     'date': ('text-single', u'Some date (e.g., birth date, hire date, sign-up date)'),
  29.     'misc': ('text-single', u'Free-form text field (obsolete)'),
  30.     'text': ('text-single', u'Free-form text field (obsolete)'),
  31.     'key': ('text-single', u'Session key for transaction (obsolete)') }
  32.  
  33. class Register(StanzaPayloadObject):
  34.     xml_element_name = 'query'
  35.     xml_element_namespace = REGISTER_NS
  36.     
  37.     def __init__(self, xmlnode = None):
  38.         self._Register__logger = logging.getLogger('pyxmpp.jabber.Register')
  39.         self.form = None
  40.         self.registered = False
  41.         self.instructions = None
  42.         self.remove = False
  43.         for f in legacy_fields:
  44.             setattr(self, f, None)
  45.         
  46.         if isinstance(xmlnode, libxml2.xmlNode):
  47.             self._Register__from_xml(xmlnode)
  48.         
  49.  
  50.     
  51.     def __from_xml(self, xmlnode):
  52.         self._Register__logger.debug('Converting jabber:iq:register element from XML')
  53.         if xmlnode.type != 'element':
  54.             raise ValueError, 'XML node is not a jabber:iq:register element (not an element)'
  55.         
  56.         ns = get_node_ns_uri(xmlnode)
  57.         if ns or ns != REGISTER_NS or xmlnode.name != 'query':
  58.             raise ValueError, 'XML node is not a jabber:iq:register element'
  59.         
  60.         for element in xml_element_iter(xmlnode.children):
  61.             ns = get_node_ns_uri(element)
  62.             if ns == DATAFORM_NS and element.name == 'x' and not (self.form):
  63.                 self.form = Form(element)
  64.             elif ns != REGISTER_NS:
  65.                 continue
  66.             
  67.             name = element.name
  68.             if name == 'instructions' and not (self.instructions):
  69.                 self.instructions = from_utf8(element.getContent())
  70.                 continue
  71.             if name == 'registered':
  72.                 self.registered = True
  73.                 continue
  74.             if name == 'remove':
  75.                 self.remove = True
  76.                 continue
  77.             if name in legacy_fields and not getattr(self, name):
  78.                 value = from_utf8(element.getContent())
  79.                 if value is None:
  80.                     value = u''
  81.                 
  82.                 self._Register__logger.debug(u'Setting legacy field %r to %r' % (name, value))
  83.                 setattr(self, name, value)
  84.                 continue
  85.         
  86.  
  87.     
  88.     def complete_xml_element(self, xmlnode, doc):
  89.         ns = xmlnode.ns()
  90.         if self.instructions is not None:
  91.             xmlnode.newTextChild(ns, 'instructions', to_utf8(self.instructions))
  92.         
  93.         if self.form:
  94.             self.form.as_xml(xmlnode, doc)
  95.         
  96.         if self.remove:
  97.             xmlnode.newChild(ns, 'remove', None)
  98.         elif self.registered:
  99.             xmlnode.newChild(ns, 'registered', None)
  100.         
  101.         for field in legacy_fields:
  102.             value = getattr(self, field)
  103.             if value is not None:
  104.                 xmlnode.newTextChild(ns, field, to_utf8(value))
  105.                 continue
  106.         
  107.  
  108.     
  109.     def get_form(self, form_type = 'form'):
  110.         if self.form:
  111.             if self.form.type != form_type:
  112.                 raise ValueError, 'Bad form type in the jabber:iq:register element'
  113.             
  114.             return self.form
  115.         
  116.         form = Form(form_type, instructions = self.instructions)
  117.         form.add_field('FORM_TYPE', [
  118.             u'jabber:iq:register'], 'hidden')
  119.         for field in legacy_fields:
  120.             (field_type, field_label) = legacy_fields[field]
  121.             value = getattr(self, field)
  122.             if value is None:
  123.                 continue
  124.             
  125.             if form_type == 'form':
  126.                 if not value:
  127.                     value = None
  128.                 
  129.                 form.add_field(name = field, field_type = field_type, label = field_label, value = value, required = True)
  130.                 continue
  131.             form.add_field(name = field, value = value)
  132.         
  133.         return form
  134.  
  135.     
  136.     def submit_form(self, form):
  137.         result = Register()
  138.         if self.form:
  139.             result.form = form.make_submit()
  140.             return result
  141.         
  142.         if 'FORM_TYPE' not in form or 'jabber:iq:register' not in form['FORM_TYPE'].values:
  143.             raise ValueError, 'FORM_TYPE is not jabber:iq:register'
  144.         
  145.         for field in legacy_fields:
  146.             self._Register__logger.debug(u'submitted field %r' % (field,))
  147.             value = getattr(self, field)
  148.             
  149.             try:
  150.                 form_value = form[field].value
  151.             except KeyError:
  152.                 if value:
  153.                     raise ValueError, 'Required field with no value!'
  154.                     continue
  155.                 continue
  156.  
  157.             setattr(result, field, form_value)
  158.         
  159.         return result
  160.  
  161.  
  162.